Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@loopback/context

Package Overview
Dependencies
Maintainers
17
Versions
197
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@loopback/context

LoopBack's container for Inversion of Control

  • 0.11.11
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
38K
increased by9.97%
Maintainers
17
Weekly downloads
 
Created
Source

@loopback/context

This module provides facilities to manage artifacts and their dependencies using Context in your Node.js applications. It can be used independent of the LoopBack framework.

Overview

The @loopback/context package exposes TypeScript/JavaScript APIs and decorators to register artifacts, declare dependencies, and resolve artifacts by keys. The Context also serves as an IoC container to support dependency injection.

Context and Binding are the two core concepts. A context is a registry of bindings and each binding represents a resolvable artifact by the key.

  • Bindings can be fulfilled by a constant, a factory function, a class, or a provider.
  • Bindings can be grouped by tags and searched by tags.
  • Binding scopes can be used to control how a resolved binding value is shared.
  • Bindings can be resolved synchronously or asynchronously.
  • Provide @inject and other variants of decorators to express dependencies.
  • Support Constructor, property, and method injections.
  • Allow contexts to form a hierarchy to share or override bindings.
  • Track bindings and injections during resolution to detect circular dependencies.

Installation

npm install --save @loopback/context

Basic use

Locate an artifact by key

const Context = require('@loopback/context').Context;
const ctx = new Context();
ctx.bind('hello').to('world'); // BindingKey='hello', BindingValue='world'
const helloVal = ctx.getSync('hello');
console.log(helloVal); // => 'world'

The binding can also be located asynchronously:

const helloVal = await ctx.get('hello');
console.log(helloVal); // => 'world'

Dependency injection using context

import {Context, inject} from '@loopback/context';
const ctx = new Context();

// bind 'greeting' to 'Hello' as the constant value
ctx.bind('greeting').to('Hello');

class HelloController {
  constructor(
    // injecting the value bound to `greeting` using context
    @inject('greeting') private greeting: string,
  ) {}

  greet(name) {
    return `${this.greeting}, ${name}`;
  }
}

// Bind 'HelloController' to class HelloController
ctx.bind('HelloController').toClass(HelloController);

async function hello() {
  // Get an instance of HelloController
  const helloController = await ctx.get<HelloController>('HelloController');
  // helloController now has the `greeting` property injected with `Hello`
  console.log(helloController.greet('John')); // => Hello, John
}

hello();

For additional information, please refer to the Context page.

Contributions

Tests

Run npm test from the root folder.

Contributors

See all contributors.

License

MIT

Keywords

FAQs

Package last updated on 11 Jul 2018

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc